Skip to main content
Glama

MCP Selenium WebDriver

by Nixon-Suarez
  • Linux
  • Apple
Servidor MCP Selenium WebDriver.md16.4 kB
# Servidor MCP Selenium WebDriver Un servidor MCP (Model Context Protocol) completo que implementa Selenium WebDriver para automatización de navegadores con capacidades avanzadas de evasión de detección, soporte para múltiples navegadores y funcionalidades completas de interacción web. ## Características Principales ### 🚀 Automatización Completa de Navegadores - **Navegación web**: Navegar a URLs, obtener información de páginas - **Interacción con elementos**: Buscar, hacer clic, escribir texto, subir archivos - **Acciones de ratón**: Hover, drag and drop, clic derecho, doble clic - **Manejo de teclado**: Envío de teclas especiales (Enter, Tab, flechas, etc.) - **Capturas de pantalla**: Pantalla completa o elementos específicos - **Ejecución de JavaScript**: Scripts personalizados en el navegador ### 🕵️ Evasión de Detección Avanzada - **Undetected Chrome**: Integración con undetected-chromedriver - **Randomización**: User agents y viewports aleatorios - **Scripts stealth**: Ocultación de propiedades de automatización - **Simulación humana**: Escritura y scroll con delays realistas - **Gestión de cookies**: Control completo de cookies y sesiones ### 🌐 Soporte Multi-Navegador - **Chrome**: Soporte completo con evasión de detección - **Firefox**: Implementación nativa de Selenium - **Detección automática**: Identificación de navegadores instalados - **Configuraciones específicas**: Optimizaciones por navegador ### ⚙️ Gestión Avanzada de Sesiones - **Múltiples sesiones**: Hasta 10 sesiones simultáneas por defecto - **Gestión automática**: Limpieza de sesiones expiradas - **Configuraciones flexibles**: Presets para diferentes casos de uso - **Proxies**: Soporte para HTTP, HTTPS y SOCKS ## Instalación ### Requisitos Previos - Python 3.8 o superior - Chrome y/o Firefox instalados - Dependencias del sistema para Selenium ### Instalación de Dependencias ```bash # Clonar o descargar el proyecto cd mcp_selenium_server # Instalar dependencias de Python pip install -r requirements.txt ``` ### Dependencias del Sistema #### Ubuntu/Debian ```bash # Chrome wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add - echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" | sudo tee /etc/apt/sources.list.d/google-chrome.list sudo apt update sudo apt install google-chrome-stable # Firefox sudo apt install firefox ``` #### CentOS/RHEL ```bash # Chrome sudo yum install -y google-chrome-stable # Firefox sudo yum install firefox ``` #### Windows - Descargar e instalar Chrome desde https://www.google.com/chrome/ - Descargar e instalar Firefox desde https://www.mozilla.org/firefox/ #### macOS ```bash # Con Homebrew brew install --cask google-chrome brew install --cask firefox ``` ## Configuración ### Configuraciones Predefinidas El servidor incluye tres configuraciones predefinidas: #### 1. Configuración por Defecto ```python DEFAULT_CONFIG = ServerConfig( max_sessions=10, session_timeout=3600, default_browser="chrome", browser_options=BrowserOptions( headless=False, window_width=1920, window_height=1080, incognito=True ) ) ``` #### 2. Configuración Stealth (Recomendada para evasión) ```python STEALTH_CONFIG = ServerConfig( browser_options=BrowserOptions( headless=True, user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...", disable_images=True, custom_args=[ "--disable-blink-features=AutomationControlled", "--disable-dev-shm-usage", "--no-first-run", # ... más argumentos stealth ] ), detection_evasion=DetectionEvasionConfig( use_undetected_chrome=True, stealth_mode=True, randomize_user_agent=True, randomize_viewport=True ) ) ``` #### 3. Configuración de Rendimiento ```python PERFORMANCE_CONFIG = ServerConfig( browser_options=BrowserOptions( headless=True, disable_images=True, disable_javascript=False, custom_args=[ "--disable-dev-shm-usage", "--disable-gpu", "--no-sandbox" ] ) ) ``` ### Configuración de Proxies ```python proxy_config = { "http": "http://proxy.example.com:8080", "https": "https://proxy.example.com:8080", "socks": "socks5://proxy.example.com:1080" } ``` ## Uso Básico ### Iniciar el Servidor ```bash # Modo desarrollo python server.py # Con MCP CLI mcp dev server.py # Instalar en Claude Desktop mcp install server.py ``` ### Ejemplo de Uso Básico ```python # 1. Iniciar navegador result = start_browser( browser_type="chrome", options={ "headless": False, "window_width": 1920, "window_height": 1080 }, detection_evasion={ "use_undetected_chrome": True, "stealth_mode": True } ) session_id = result["session_id"] # 2. Navegar a una página navigate_to_url(session_id, "https://example.com") # 3. Buscar un elemento element = find_element( session_id=session_id, strategy="css_selector", value="input[name='search']" ) # 4. Escribir texto type_text( session_id=session_id, strategy="css_selector", value="input[name='search']", text="selenium automation" ) # 5. Hacer clic en botón click_element( session_id=session_id, strategy="css_selector", value="button[type='submit']" ) # 6. Tomar captura de pantalla take_screenshot( session_id=session_id, file_path="/path/to/screenshot.png" ) # 7. Cerrar navegador close_browser(session_id) ``` ## Herramientas MCP Disponibles ### Gestión de Navegadores | Herramienta | Descripción | |-------------|-------------| | `start_browser` | Inicia una nueva sesión de navegador | | `close_browser` | Cierra una sesión específica | | `detect_available_browsers` | Detecta navegadores instalados | | `get_recommended_browser` | Obtiene el navegador recomendado | | `check_browser_support` | Verifica soporte de WebDriver | ### Navegación y Páginas | Herramienta | Descripción | |-------------|-------------| | `navigate_to_url` | Navega a una URL específica | | `get_page_info` | Obtiene información de la página actual | | `execute_script` | Ejecuta JavaScript en el navegador | ### Interacción con Elementos | Herramienta | Descripción | |-------------|-------------| | `find_element` | Busca elementos con diferentes estrategias | | `click_element` | Hace clic en un elemento | | `type_text` | Escribe texto en un elemento | | `upload_file` | Sube archivos a inputs de tipo file | ### Acciones Avanzadas | Herramienta | Descripción | |-------------|-------------| | `perform_mouse_action` | Acciones de ratón (hover, drag & drop) | | `send_keys` | Envía teclas especiales | | `take_screenshot` | Captura pantalla completa o elementos | ### Evasión de Detección | Herramienta | Descripción | |-------------|-------------| | `apply_stealth_mode` | Aplica todas las técnicas stealth | | `randomize_user_agent` | Cambia a un user agent aleatorio | | `randomize_viewport` | Cambia el tamaño de ventana | | `simulate_human_typing` | Escritura con delays humanos | | `scroll_like_human` | Scroll gradual simulando humano | | `add_random_delay` | Agrega delays aleatorios | ### Gestión de Sesiones | Herramienta | Descripción | |-------------|-------------| | `list_active_sessions` | Lista todas las sesiones activas | | `get_session_info` | Información detallada de una sesión | | `close_all_sessions` | Cierra todas las sesiones | | `cleanup_expired_sessions` | Limpia sesiones expiradas | ### Gestión de Cookies | Herramienta | Descripción | |-------------|-------------| | `manage_cookies` | Gestión completa de cookies | ### Configuración del Servidor | Herramienta | Descripción | |-------------|-------------| | `get_server_status` | Estado actual del servidor | | `update_server_config` | Actualiza configuración con presets | ## Ejemplos Avanzados ### Automatización con Evasión de Detección ```python # Configuración stealth completa session_result = start_browser( browser_type="chrome", options={ "headless": True, "disable_images": True, "incognito": True }, detection_evasion={ "use_undetected_chrome": True, "stealth_mode": True, "randomize_user_agent": True, "randomize_viewport": True } ) session_id = session_result["session_id"] # Aplicar modo stealth adicional apply_stealth_mode(session_id) # Navegar con delays humanos navigate_to_url(session_id, "https://example.com") add_random_delay(1.0, 3.0) # Scroll humano scroll_like_human(session_id, "down", 500, 8) add_random_delay(0.5, 1.5) # Escritura humana simulate_human_typing( session_id=session_id, strategy="id", value="search-input", text="automated search query", min_delay=0.05, max_delay=0.15 ) # Gestión de cookies manage_cookies( session_id=session_id, action="add", cookie_data={ "name": "session_token", "value": "abc123", "domain": "example.com" } ) ``` ### Automatización de Formularios ```python # Llenar formulario complejo session_id = start_browser("chrome")["session_id"] navigate_to_url(session_id, "https://forms.example.com") # Campos de texto type_text(session_id, "id", "first_name", "John") type_text(session_id, "id", "last_name", "Doe") type_text(session_id, "id", "email", "john.doe@example.com") # Seleccionar dropdown click_element(session_id, "id", "country_select") click_element(session_id, "xpath", "//option[text()='United States']") # Subir archivo upload_file( session_id=session_id, strategy="id", value="file_upload", file_path="/path/to/document.pdf" ) # Checkbox click_element(session_id, "id", "terms_checkbox") # Enviar formulario click_element(session_id, "css_selector", "button[type='submit']") # Esperar y verificar add_random_delay(2.0, 4.0) page_info = get_page_info(session_id) print(f"Página actual: {page_info['title']}") ``` ### Scraping con Múltiples Sesiones ```python # Iniciar múltiples sesiones sessions = [] urls = ["https://site1.com", "https://site2.com", "https://site3.com"] for i, url in enumerate(urls): result = start_browser( browser_type="chrome", options={"headless": True}, detection_evasion={"use_undetected_chrome": True} ) session_id = result["session_id"] sessions.append(session_id) # Navegar en paralelo navigate_to_url(session_id, url) apply_stealth_mode(session_id) # Procesar cada sesión for i, session_id in enumerate(sessions): # Extraer datos elements = find_element( session_id=session_id, strategy="css_selector", value=".data-item", multiple=True ) # Tomar captura take_screenshot( session_id=session_id, file_path=f"/screenshots/site_{i+1}.png" ) # Limpiar todas las sesiones close_all_sessions() ``` ## Estrategias de Localización de Elementos El servidor soporta todas las estrategias estándar de Selenium: | Estrategia | Descripción | Ejemplo | |------------|-------------|---------| | `id` | Por atributo ID | `"search-button"` | | `name` | Por atributo name | `"username"` | | `class_name` | Por clase CSS | `"btn-primary"` | | `tag_name` | Por nombre de etiqueta | `"button"` | | `css_selector` | Selector CSS | `"div.container > p"` | | `xpath` | Expresión XPath | `"//div[@class='content']//p"` | | `link_text` | Texto exacto del enlace | `"Click here"` | | `partial_link_text` | Texto parcial del enlace | `"Click"` | ### Ejemplos de Selectores ```python # Por ID find_element(session_id, "id", "submit-btn") # Por clase CSS find_element(session_id, "class_name", "form-control") # Selector CSS complejo find_element(session_id, "css_selector", "div.modal .btn-primary:not(:disabled)") # XPath avanzado find_element(session_id, "xpath", "//table//tr[contains(@class, 'data-row')][position()>1]") # Múltiples elementos find_element(session_id, "css_selector", ".product-item", multiple=True) ``` ## Configuración de Proxies ### Tipos de Proxy Soportados ```python # HTTP Proxy proxy_config = {"http": "http://proxy.example.com:8080"} # HTTPS Proxy proxy_config = {"https": "https://proxy.example.com:8080"} # SOCKS Proxy proxy_config = {"socks": "socks5://proxy.example.com:1080"} # Proxy con autenticación proxy_config = {"http": "http://user:pass@proxy.example.com:8080"} # Usar proxy al iniciar navegador start_browser( browser_type="chrome", proxy=proxy_config, options={"headless": True} ) ``` ## Manejo de Errores El servidor maneja automáticamente los errores comunes y proporciona mensajes descriptivos: ```python # Ejemplo de respuesta con error { "success": False, "error": "Timeout: Elemento no encontrado", "message": "No se pudo encontrar elemento con id='missing-element' en 10 segundos" } # Ejemplo de respuesta exitosa { "success": True, "session_id": "abc123-def456", "message": "Navegador chrome iniciado exitosamente" } ``` ### Errores Comunes y Soluciones | Error | Causa | Solución | |-------|-------|----------| | `Sesión no encontrada` | ID de sesión inválido | Verificar que la sesión esté activa | | `Timeout: Elemento no encontrado` | Selector incorrecto o elemento no visible | Revisar selector y aumentar timeout | | `WebDriverException` | Problema con el driver | Reinstalar webdriver-manager | | `ElementNotInteractableException` | Elemento no clickeable | Usar scroll o esperar a que sea visible | ## Mejores Prácticas ### Para Evasión de Detección 1. **Usar configuración stealth**: Siempre aplicar `STEALTH_CONFIG` para sitios que detectan bots 2. **Delays aleatorios**: Agregar delays entre acciones para simular comportamiento humano 3. **Randomización**: Cambiar user agents y viewports regularmente 4. **Gestión de cookies**: Mantener cookies de sesión para parecer un usuario real 5. **Scroll gradual**: Usar `scroll_like_human` en lugar de scroll instantáneo ### Para Rendimiento 1. **Modo headless**: Usar para operaciones en lote 2. **Deshabilitar imágenes**: Reducir tiempo de carga 3. **Gestión de sesiones**: Cerrar sesiones no utilizadas 4. **Timeouts apropiados**: Configurar timeouts según la velocidad del sitio ### Para Estabilidad 1. **Manejo de errores**: Siempre verificar `success` en las respuestas 2. **Limpieza de sesiones**: Usar `cleanup_expired_sessions` regularmente 3. **Verificar elementos**: Usar `find_element` antes de interactuar 4. **Capturas de pantalla**: Tomar capturas para debugging ## Limitaciones - **Máximo de sesiones**: 10 sesiones simultáneas por defecto (configurable) - **Timeout de sesión**: 1 hora por defecto (configurable) - **Navegadores soportados**: Chrome y Firefox únicamente - **Detección**: Algunos sitios avanzados pueden detectar automatización ## Solución de Problemas ### Problemas de Instalación ```bash # Error: ChromeDriver no encontrado pip install --upgrade webdriver-manager # Error: Dependencias del sistema sudo apt-get install -y libgconf-2-4 libxss1 libxtst6 libxrandr2 libasound2 libpangocairo-1.0-0 libatk1.0-0 libcairo-gobject2 libgtk-3-0 libgdk-pixbuf2.0-0 # Error: Permisos sudo chmod +x /usr/bin/google-chrome ``` ### Problemas de Ejecución ```bash # Verificar navegadores disponibles python -c " from browser_detection import BrowserDetection bd = BrowserDetection() print(bd.detect_available_browsers()) " # Probar configuración básica python -c " from webdriver_manager import WebDriverManager wm = WebDriverManager() driver = wm.create_driver('chrome', BrowserOptions()) print('Chrome funciona correctamente') driver.quit() " ``` ## Contribución Para contribuir al proyecto: 1. Fork el repositorio 2. Crear una rama para la nueva característica 3. Implementar cambios con tests 4. Enviar pull request ## Licencia Este proyecto está bajo la licencia MIT. Ver archivo LICENSE para más detalles. ## Soporte Para reportar bugs o solicitar características: - Crear un issue en el repositorio - Incluir logs de error y configuración utilizada - Especificar sistema operativo y versión de navegador --- **Desarrollado por Manus AI** - Automatización de navegadores inteligente y confiable.

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Nixon-Suarez/MCP-Selenium-WebDriver'

If you have feedback or need assistance with the MCP directory API, please join our Discord server